// apis/uni-fetch.js

// 导入安装好的 uni-app-fetch 模块
import { createUniFetch } from 'uni-app-fetch'
import { useUserStore } from '@/stores/user'

// 定义 tabBar 的路径
const tabBarPagePaths = [
  'pages/task/index',
  'pages/message/index',
  'pages/my/index',
]

// 配置符合自身业务的请求对象
export const uniFetch = createUniFetch({
  loading: { title: '正在加载...' },
  baseURL: 'https://slwl-api.itheima.net',
  intercept: {
    // 请求拦截器
    request(options) {
      const userStore = useUserStore()
      // 1. 定义一个默认的请求头对象
      const defaultHeader = {}
      if (userStore.token) defaultHeader.Authorization = userStore.token
      // 2. 合并默认请求头对象和页面传过来的请求头对象
      options.header = Object.assign(defaultHeader, options.header)
      return options
    },
    // 响应拦截器
    response({ statusCode, data }) {
      // 判断token失效
      if (statusCode === 401) {
        // 获取当前页面所在的页面栈
        const pageStack = getCurrentPages()
        // 获取到当前页面
        const currentPage = pageStack[pageStack.length - 1]
        // 获取到当前页面对应的路径
        const redirectUrl = currentPage.route
        // 判断跳转的方式(tabBar页面用switchTab, 非tabBar页面用navigateTo)
        const routerType = tabBarPagePaths.includes(redirectUrl)
          ? 'switchTab'
          : 'navigateTo'
        // 拦截去登录页
        uni.navigateTo({
          url: `/pages/login/index?redirectUrl=/${redirectUrl}&routerType=${routerType}`,
        })
      }
      return data
    },
  },
})
